/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.adsi.vista;

import com.adsi.logica.LogicaTipoUsuarioLocal;
import com.adsi.logica.LogicaUsuariosLocal;
import com.adsi.modelo.TiposUsuarios;
import com.adsi.modelo.Usuarios;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.password.Password;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Admin
 */
@ManagedBean(name = "usuariosVista")
@RequestScoped
public class UsuariosVista {

    @EJB
    private LogicaUsuariosLocal logicaUsuarios;

    @EJB
    private LogicaTipoUsuarioLocal logicaTipoUsuarios;

    private InputText txtCedula;
    private SelectOneMenu cmbTiposUsuarios;
    private InputText txtNombreUsuario;
    private InputText txtNombreLogin;
    private Password txtClave;
    private List<Usuarios> listaUsuarios;
    private CommandButton btnRegistrar;
    private CommandButton btnModificar;
    private CommandButton btnEliminar;
    private CommandButton btnLimpiar;
    private Usuarios selectedUsuario;
    private ArrayList<SelectItem> itemsTiposUsuario;

    /**
     * Creates a new instance of UsuariosVista
     */
    public UsuariosVista() {
    }

    public LogicaTipoUsuarioLocal getLogicaTipoUsuarios() {
        return logicaTipoUsuarios;
    }

    public void setLogicaTipoUsuarios(LogicaTipoUsuarioLocal logicaTipoUsuarios) {
        this.logicaTipoUsuarios = logicaTipoUsuarios;
    }

    public LogicaTipoUsuarioLocal getLogicaTipoUsuaios() {
        return logicaTipoUsuarios;
    }

    public void setLogicaTipoUsuaios(LogicaTipoUsuarioLocal logicaTipoUsuaios) {
        this.logicaTipoUsuarios = logicaTipoUsuaios;
    }

    public List<Usuarios> getListaUsuarios() {

        if (listaUsuarios == null) {
            try {
                listaUsuarios = logicaUsuarios.consultarUsuarios();
            } catch (Exception ex) {
                Logger.getLogger(UsuariosVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listaUsuarios;
    }

    public void setListaUsuarios(List<Usuarios> listaUsuarios) {
        this.listaUsuarios = listaUsuarios;
    }

    public ArrayList<SelectItem> getItemsTiposUsuario() {

        try {
            if (itemsTiposUsuario == null) {
                itemsTiposUsuario = new ArrayList<>();
            }
            List<TiposUsuarios> tipos = logicaTipoUsuarios.consultar();

            for (int i = 0; i < tipos.size(); i++) {
                itemsTiposUsuario.add(new SelectItem(tipos.get(i).getTusuCodigo(), tipos.get(i).getTusuNombre()));

            }

        } catch (Exception ex) {
            Logger.getLogger(UsuariosVista.class.getName()).log(Level.SEVERE, null, ex);
        }

        return itemsTiposUsuario;
    }

    public void setItemsTiposUsuario(ArrayList<SelectItem> itemsTiposUsuario) {
        this.itemsTiposUsuario = itemsTiposUsuario;
    }

    public LogicaUsuariosLocal getLogicaUsuarios() {
        return logicaUsuarios;
    }

    public void setLogicaUsuarios(LogicaUsuariosLocal logicaUsuarios) {
        this.logicaUsuarios = logicaUsuarios;
    }

    public InputText getTxtCedula() {
        return txtCedula;
    }

    public void setTxtCedula(InputText txtCedula) {
        this.txtCedula = txtCedula;
    }

    public SelectOneMenu getCmbTiposUsuarios() {
        return cmbTiposUsuarios;
    }

    public void setCmbTiposUsuarios(SelectOneMenu cmbTiposUsuarios) {
        this.cmbTiposUsuarios = cmbTiposUsuarios;
    }

    public InputText getTxtNombreUsuario() {
        return txtNombreUsuario;
    }

    public void setTxtNombreUsuario(InputText txtNombreUsuario) {
        this.txtNombreUsuario = txtNombreUsuario;
    }

    public InputText getTxtNombreLogin() {
        return txtNombreLogin;
    }

    public void setTxtNombreLogin(InputText txtNombreLogin) {
        this.txtNombreLogin = txtNombreLogin;
    }

    public Password getTxtClave() {
        return txtClave;
    }

    public void setTxtClave(Password txtClave) {
        this.txtClave = txtClave;
    }

    public CommandButton getBtnRegistrar() {
        return btnRegistrar;
    }

    public void setBtnRegistrar(CommandButton btnRegistrar) {
        this.btnRegistrar = btnRegistrar;
    }

    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public Usuarios getSelectedUsuario() {
        return selectedUsuario;
    }

    public void setSelectedUsuario(Usuarios selectedUsuario) {
        this.selectedUsuario = selectedUsuario;
    }

    public void funcion_limpiar() {
        txtCedula.setValue("");
        txtNombreUsuario.setValue("");
        txtNombreLogin.setValue("");
        txtClave.setValue("");
        txtCedula.setDisabled(false);
        btnRegistrar.setDisabled(false);
        btnModificar.setDisabled(true);
        btnEliminar.setDisabled(true);
    }

    public void funcion_registrar() {
        try {
            Usuarios nuevoUsuario = new Usuarios();
            nuevoUsuario.setUsuCedula(Long.parseLong(txtCedula.getValue().toString()));
            TiposUsuarios tiposUsuario = logicaTipoUsuarios.consultarPorDoc(Long.parseLong(cmbTiposUsuarios.getValue().toString()));
            nuevoUsuario.setTusuCodigo(tiposUsuario);
            nuevoUsuario.setUsuNombre(txtNombreUsuario.getValue().toString());
            nuevoUsuario.setUsuLogin(txtNombreLogin.getValue().toString());
            nuevoUsuario.setUsuClave(txtClave.getValue().toString());
            logicaUsuarios.registrarUsuario(nuevoUsuario);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Informacion", "Registro Existoso"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Excepción", "Excepcion :" + ex.getMessage()));
            Logger.getLogger(UsuariosVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        listaUsuarios = null;
        itemsTiposUsuario = null;
        funcion_limpiar();
    }

    public void funcion_modificar() {
        try {
            Usuarios nuevoUsuario = new Usuarios();
            nuevoUsuario.setUsuCedula(Long.parseLong(txtCedula.getValue().toString()));
            TiposUsuarios tiposUsuario = logicaTipoUsuarios.consultarPorDoc(Long.parseLong(cmbTiposUsuarios.getValue().toString()));
            nuevoUsuario.setTusuCodigo(tiposUsuario);
            nuevoUsuario.setUsuNombre(txtNombreUsuario.getValue().toString());
            nuevoUsuario.setUsuLogin(txtNombreLogin.getValue().toString());
            nuevoUsuario.setUsuClave(txtClave.getValue().toString());
            logicaUsuarios.modificarUsuario(nuevoUsuario);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Informacion", "Modificación Existosa"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Excepcion", "Excepción :" + ex.getMessage()));
            Logger.getLogger(UsuariosVista.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void funcion_eliminar() {
        try {
            Usuarios usuario = new Usuarios();
            usuario.setUsuCedula(Long.parseLong(txtCedula.getValue().toString()));
            logicaUsuarios.eliminarUsuario(usuario);
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Información", "Usuario eliminado"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Excepcion", "Excepción :" + ex.getMessage()));
            Logger.getLogger(UsuariosVista.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void funcion_seleccionar(SelectEvent event) {

        Usuarios usuario = (Usuarios) event.getObject();
        txtCedula.setValue(usuario.getUsuCedula().toString());
        cmbTiposUsuarios.setValue(usuario.getTusuCodigo().getTusuCodigo().toString());
        txtNombreUsuario.setValue(usuario.getUsuNombre().toString());
        txtNombreLogin.setValue(usuario.getUsuLogin().toString());
        txtCedula.setDisabled(true);
        btnRegistrar.setDisabled(true);
        btnModificar.setDisabled(false);
        btnEliminar.setDisabled(false);
    }

}
